package org.darcy.framework.generic;

import java.util.Collection;
import java.util.List;

import org.darcy.framework.model.PageData;
import org.darcy.framework.model.PageParam;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;

/**
 * 所有自定义Service的顶级接口,封装常用的增删查改操作
 */
public interface GenericService<T> {

	/**
	 * 插入对象
	 *
	 * @param model 对象
	 */
	T insert(T model);

	/**
	 * 通过主键, 删除对象
	 *
	 * @param id 主键
	 */
	int delete(Object id);

	/**
	 * 批量删除
	 *
	 * @param idList 主键集合
	 */
	int deleteByIds(Collection<?> idList);

	/**
	 * 批量删除
	 *
	 * @param queryWrapper 查询条件
	 */
	public int deleteBatch(Wrapper<T> queryWrapper);

	/**
	 * 更新对象
	 *
	 * @param model 对象
	 */
	T update(T model);

	/**
	 * 批量更新
	 *
	 * @param list 对象列表
	 */
	public int updateBatch(List<T> list);

	/**
	 * count 数量
	 */
	long count(Wrapper<T> queryWrapper);

	/**
	 * 通过主键, 查询对象
	 *
	 * @param id 主键
	 * @return model 对象
	 */
	T getById(Object id);

	/**
	 * 批量查询
	 *
	 * @param idList 主键列表
	 * @return
	 */
	public List<T> getByIds(Collection<?> idList);

	/**
	 * 通过条件查询单个对象
	 *
	 * @param id 主键
	 * @return model 对象
	 */
	T getOne(Wrapper<T> queryWrapper);

	/**
	 * 根据条件查询列表数据
	 * 
	 * @param queryWrapper
	 * @return
	 */
	public List<T> getList(Wrapper<T> queryWrapper);

	/**
	 * 根据条件查询列表数据(分页)
	 * 
	 * @param page         分页条件
	 * @param queryWrapper 查询条件
	 * @return
	 */
	public IPage<T> getPage(IPage<T> page, Wrapper<T> queryWrapper);

	/**
	 * 分页查询列表
	 *
	 * @return 对象集合
	 */
	PageData<T> getPageData(PageParam param);

}
